package controladores;



import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;

import modelo.hibernate.dao.DaoEvento;
import modelo.hibernate.dao.DaoSeccion;
import modelo.hibernate.dao.DaoTipoEvento;
import modelos.datos.TipoEvento;
import modelos.datos.evento;
import modelos.datos.seccion;

import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.event.MouseEvent;
import org.zkoss.zk.ui.select.SelectorComposer;
import org.zkoss.zk.ui.select.annotation.Listen;
import org.zkoss.zk.ui.select.annotation.Wire;
import org.zkoss.zk.ui.util.Clients;
import org.zkoss.zul.Combobox;
import org.zkoss.zul.Datebox;
import org.zkoss.zul.ListModelList;
import org.zkoss.zul.Listbox;
import org.zkoss.zul.Listitem;
import org.zkoss.zul.Messagebox;
import org.zkoss.zul.Textbox;

public class ControladorRegistrarEvento extends SelectorComposer<Component>{

	private DaoEvento daoevento= new DaoEvento();
	private DaoTipoEvento daotipo= new DaoTipoEvento();
	private DaoSeccion daoseccion= new DaoSeccion();
	
	private evento nuevoEv= new evento();
	private TipoEvento tipo= new TipoEvento();
	private seccion secciones= new seccion();
	
	private List<TipoEvento> LTipos= new ArrayList<>();
	private List<evento> LEventos=new ArrayList<>();
	private List<seccion> LSecciones= new ArrayList<>();

	private Set<seccion> seccionlist= new LinkedHashSet<>();
	
	@Wire 
	private Textbox nombre;
	@Wire 
	private Datebox fechafin;
	@Wire
	private Listbox ListBoxSecciones;
	@Wire
	private Combobox cmbTipos;
	@Wire
	private Datebox fechaIni;
	
	
	public ControladorRegistrarEvento() {
		super();
		// TODO Auto-generated constructor stub
		try {
			LTipos=daotipo.obtenerTodos();
			LEventos=daoevento.obtenerTodos();
			LSecciones=daoseccion.obtenerTodos();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}	
	}
	
	
	public List<TipoEvento> gettiposevento(){
		List<TipoEvento> tipoevento= new ArrayList<>();
		for(int i=0; i<LTipos.size(); i++){
			tipoevento.add(LTipos.get(i));
		}
		return tipoevento;
	}
	
	public List<seccion> getsecciones(){
		List<seccion> secciones= new ArrayList<>();
		for(int i=0; i<LSecciones.size(); i++){
			secciones.add(LSecciones.get(i));
		}
		
		return secciones;
	}
	
	public int buscarArea (String nom)
   	{	
   	  try {		  
   		for (int i=0; i<daotipo.obtenerTodos().size(); i++){
   	        if (daotipo.obtenerTodos().get(i).getNombre().equals(nom))
   		  {	  
   	        	  return i;
   		  }
   		}
   			} catch (Exception e) {
   				// TODO Auto-generated catch block
   				e.printStackTrace();
   			}
   			  return -1; 
   	}
	    
	@Listen("onClick=#btnRegistrar")
	public void onClick$btnRegistrar(MouseEvent event){
		
		 evento findevento=new evento();
		 TipoEvento findtipo=new TipoEvento();
		//Para generar el codigo
		int cantEv= LEventos.size()+1;
		String cod="";
		if(LEventos.size()<10){
       	 cod=("EV00"+cantEv);
        }else if(LEventos.size()<100){
       	 cod=("EV"+cantEv);
        }else
       	 cod=("EV"+cantEv);
		
		/*if(nombre.getValue().equals(null)||ListBoxSecciones.getSelectedItems().equals(null)
				||cmbTipos.getValue().equals(-1)
				||fechafin.getValue().equals(null))
		{
			Clients.showNotification("Debe Completar todos los campos", "info", null, null, 800);
		}else{*/
		
		nuevoEv.setCodEvento(cod);
		nuevoEv.setFechaInicio(fechaIni.getValue());
		nuevoEv.setFechaFin(fechafin.getValue());
		nuevoEv.setNombre(nombre.getValue());
		
		
		Set seleccion =ListBoxSecciones.getSelectedItems();
		
		
		 for (Iterator iter = seleccion.iterator(); iter.hasNext();) {
    		 Listitem item = (Listitem) iter.next();
    		 seccion o = (seccion)item.getValue();
    		 seccionlist.add(o);
    		 
    		 }		
		
		
		try {
			for(int i=0;i<LTipos.size();i++)
			{
				if(LTipos.get(i).getNombre().equals(cmbTipos.getValue()))
					findtipo=LTipos.get(i);
			}
			nuevoEv.setTipo(findtipo);
			nuevoEv.setSecciones(seccionlist);
			daoevento.agregarEvento(nuevoEv);
			Clients.showNotification("Registro Exitoso", "info", null, null, 500);
			this.LimpiarCampos();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		//}
	}
	 public void LimpiarCampos()
	    {
	    	
	    	nombre.setText("");
	    	fechafin.setText("");
	    	cmbTipos.setText("");
	    	
	    }

}
